package com.tedu.api.ee;

import org.junit.Test;

/**
 * java幼体套完整异常处理操作”
 * 程序中对应出现什么问题，就会有对应一场【对象】提供出来，错误也是对象
 *
 * Throwable顶级超类--抛出错误：
 *  子类： Exception对象：程序级别的错误（经常遇见）
 *                    编译期--FileOutputStream（编写代码同时，下方波浪线）
 *                    处理方式①：抛出异常：不管什么错误，抛出方法外
 *                           ②：捕获异常，抓到一场，记录异常错误信息
 *                    检查异常：通常由编译器检查出来，存在异常类，抛出、捕获
 *
 *                    运行期--控制台（IDE开发工具控制太，显示出红色，异常类名字）
 *                    非检查异常：RuntimeException（认为所有异常来自RuntimeException）
 *                       所有异常都是RuntimeException的子类
 *        Error对象：描述系统级别的错误（不常见）
 *        ---测试：程序挂了？    利用字符串不断拼接-Error
 *        String str="字符串"；    直接量写出字符串   ---存常量池
 */
public class EE {
    /**
     * Error错误--递归方式找溢出
     * 1.创建静态方法method
     * 2.在静态方法中调用method
     * 3.通过testError单元测试--调用EE对象下的method方法
     */
    public static void method(){
        method();
    }
    @Test
    public void testError(){
        EE.method();

    }
    //Exception  检查异常   --处理手段2：捕获方式---预判程序出什么异常

    /**
     * 捕获异常语法:
     *            try{可能出现的异常代码段中添加
     *            }catch(异常名字 e){
     *                e.printStackTrace();打印异常信息--
     *                                     方便开发者查询原因
     *            }
     */
    @Test
    public void testException(){
        try {
            String s="a";
            //StringIndexOutOfBoundsException异常--字符串下标越界异常
            //异常产生原因：指定下标超出字符串范围
            //s.charAt(0);

            //NullPainterException异常--空指针异常
            //异常原因：字符串为空，拿到数据值为空时
            //s.length();

            //NumberFormatException异常--数值转换异常
            //异常产生原因：将存储的不是整数的字符串，转换为整数
            Integer.parseInt(s);//a是整数型
        } catch (NumberFormatException e) {
            e.printStackTrace();
        } finally {
        }
    }
}
